gusucode.com > 支持向量机工具箱 - LIBSVM OSU_SVM LS_SVM源码程序 > 支持向量机工具箱 - LIBSVM OSU_SVM LS_SVM\LS_SVMlab\kernel_matrix.m
function omega = kernel_matrix(Xtrain,kernel_type, kernel_pars,Xt) % Construct the positive (semi-) definite and symmetric kernel matrix % % >> Omega = kernel_matrix(X, kernel_fct, sig2) % % This matrix should be positive definite if the kernel function % satisfies the Mercer condition. Construct the kernel values for % all test data points in the rows of Xt, relative to the points of X. % % >> Omega_Xt = kernel_matrix(X, kernel_fct, sig2, Xt) % % % Full syntax % % >> Omega = kernel_matrix(X, kernel_fct, sig2) % >> Omega = kernel_matrix(X, kernel_fct, sig2, Xt) % % Outputs % Omega : N x N (N x Nt) kernel matrix % Inputs % X : N x d matrix with the inputs of the training data % kernel : Kernel type (by default 'RBF_kernel') % sig2 : Kernel parameter (bandwidth in the case of the 'RBF_kernel') % Xt(*) : Nt x d matrix with the inputs of the test data % % See also: % RBF_kernel, lin_kernel, kpca, trainlssvm, kentropy % Copyright (c) 2002, KULeuven-ESAT-SCD, License & help @ http://www.esat.kuleuven.ac.be/sista/lssvmlab nb_data = size(Xtrain,1); if nb_data> 3000, error(' Too memory intensive, the kernel matrix is restricted to size 3000 x 3000 '); end %if size(Xtrain,1)<size(Xtrain,2), % warning('dimension of datapoints larger than number of datapoints?'); %end if strcmp(kernel_type,'RBF_kernel'), if nargin<4, XXh = sum(Xtrain.^2,2)*ones(1,nb_data); omega = XXh+XXh'-2*Xtrain*Xtrain'; omega = exp(-omega./kernel_pars(1)); else XXh1 = sum(Xtrain.^2,2)*ones(1,size(Xt,1)); XXh2 = sum(Xt.^2,2)*ones(1,nb_data); omega = XXh1+XXh2' - 2*Xtrain*Xt'; omega = exp(-omega./kernel_pars(1)); end else if nargin<4, omega = zeros(nb_data,nb_data); for i=1:nb_data, omega(i:end,i) = feval(kernel_type, Xtrain(i,:), Xtrain(i:end,:),kernel_pars); omega(i,i:end) = omega(i:end,i)'; end else if size(Xt,2)~=size(Xtrain,2), error('dimension test data not equal to dimension traindata;'); end omega = zeros(nb_data, size(Xt,1)); for i=1:size(Xt,1), omega(:,i) = feval(kernel_type, Xt(i,:), Xtrain, kernel_pars); end end end